在開始今天的文章前,我們要先了解甚麼是Cookie。
Cookie 是存儲在客戶端瀏覽器的一小段文本信息,他的基本結構是由名稱(Name)值(Value)及其他屬性例如過期時間組成的,它可以在用戶本地保存狀態信息,例如用戶身份、購物車商品等。
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        # 假設驗證成功
        if username == 'johndoe' and password == 'secret':
            response = make_response(redirect(url_for('dashboard')))
            response.set_cookie('session_id', '1234567890abcdef')
            return response
    return '''
        <form method="post">
            用戶名: <input type="text" name="username"><br>
            密碼: <input type="password" name="password"><br>
            <input type="submit" value="登入">
        </form>
    '''
@app.route('/dashboard')
def dashboard():
    session_id = request.cookies.get('session_id')
    if session_id == '1234567890abcdef':
        return '歡迎來到儀表板,您的會話 ID 是有效的!'
    else:
        return '未經授權的訪問!'
伺服器接收到請求後,讀取並驗證 session_id Cookie。如果 Cookie 有效,返回儀表板頁面;如果無效,返回未授權的訪問信息。
在Flask我們可以透過使用make_respone()函數來從視圖函數的返回值中獲得響應對象,之後可以使用響應對象的set_cookie來設置Cookie。
下面有一個簡單範例
from flask import Flask,make_response
app = Flask(__name__)
@app.route('/')
def index():
    resp = make_response('success')
    resp.set_cookie('username', 'rrrrrrrrrrrr')
    return resp
if __name__ == '__main__':
    app.run(debug = True)
我們先來看一下網頁效果
接著我們來看一下是不是cookie是不是有設定成功
再來我們來看一下程式碼吧
resp = make_response('success')我們透過make_response()函數生成一個新的響應對象resp。裡面先封裝了一個字符串'success'作為響應體。resp上調用set_cookie()方法,來設定一個Cookie。這裡設定了一個名為'username',值為'rrrrrrrrrrr'的Cookie。這樣當瀏覽器接收到響應後,就會根據Set-Cookie頭部信息,在本地保存一個名為username,值為rrrrrrrrrrr的Cookie。
除了剛剛看到的key跟value他其實還有很多可以設定的
| 參數 | 說明 | 
|---|---|
| key | cookie的鍵 | 
| value | cookie的值 | 
| max_age | cookie被保存的時間,單位為秒 | 
| expores | 具體的過期時間 | 
| path | 限制cookie只在指定的路徑可用,默認為全部可用 | 
| domain | 設置cookie可用的域名可用,默認是當前域名 | 
| secure | 如果設為True,只有HTTPS可以用 | 
當我們能夠設定Cookie後我們也比須能夠取得Cookie的值吧!
我們可以透過訪問request對象的cookies屬性來訪問客戶單提交的Cookie訊息,Flask會將客戶端所有Cookie解析到request.cookies中,其中存儲格式為字典。
我們可以通過cookies字典的鍵來訪問單個Cookie。
接著我們在剛剛的程式碼中再加入下面的三行,不要忘了在最前面的import中多引入一個request喔
from flask import Flask,make_response,request
@app.route('/profile')
def profile():
    username = request.cookies.get('username') 
    return username
接著我們來看一下網頁效果吧
接著我們來試試看怎麼刪除Cookie,這個應該不用多說甚麼了吧(?
我們新增這幾行程式碼
@app.route('/del')
def delete():
    resp = make_response('del success')
    resp.delete_cookie('username')
    return resp
訪問localhost:5000/del來看看是不是成功清除了username了。

可以看到username不見了,這樣就是已經成功刪除了喔!